﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ModuloAdministrativo.WSsiar;

namespace ModuloAdministrativo.Classes
{
    public class Mesa
    {
        public int numMesa{ get; set; }
        //List<BebidaBean> bebidas;
        //List<PratoBean> pratos;
        float total = 0;
        public float desconto {get;set;}

        public float Total
        {
            get { return total; }
            set { total = value; }
        }
        List<PedidoBean> vendas;
        ServicosSIARSoapClient ws = new ServicosSIARSoapClient();

        public Mesa(){
            vendas = new List<PedidoBean>();
        }
        public Mesa(int numMesa){
            this.numMesa = numMesa;
            vendas = new List<PedidoBean>();
        }
        public void adicionarBebida(BebidaBean umaBebida, int id_Func, int numMesa){
            Pedido umPedido = new Pedido();
            umPedido.ID_Func = id_Func;
            umPedido.Num_Mesa = numMesa;
            umPedido.ID_Bebida = umaBebida.Id;
            umPedido.Qtd = 1;
            umPedido.Status = "Em Espera";
            ws.PedidoCadastrar(umPedido);
            total += (float)umaBebida.Preco;
            
            PedidoBean pedido = ws.PedidoListar().Last();
            vendas.Add(pedido);
        }
        public void adicionarPrato(PratoBean prato, int id_Func, int numMesa)
        {
            Pedido umPedido = new Pedido();
            umPedido.ID_Func = id_Func;
            umPedido.Num_Mesa = numMesa;
            umPedido.ID_Prato = prato.Id;
            umPedido.Qtd = 1;
            umPedido.Status = "Em Espera";
            ws.PedidoCadastrar(umPedido);
            total += (float)prato.Preco;

            PedidoBean pedido = ws.PedidoListar().Last();
            vendas.Add(pedido);
        }
        public void adicionarVenda(PedidoBean umaVenda) {
            PedidoBean pedido = new PedidoBean();
            pedido.Id = umaVenda.Id;
            if (umaVenda.Id_Bebida != null && umaVenda.Id_Bebida != 0) {
                pedido.Id_Bebida = umaVenda.Id_Bebida;
                float valor = (float)ws.BebidaBuscar((int)pedido.Id_Bebida).Preco;
                total = total + valor;
            }
            else if (umaVenda.Id_Prato != null && umaVenda.Id_Prato != 0) 
            {
                pedido.Id_Prato = umaVenda.Id_Prato;
                total = (total + (float)ws.PratoBuscar((int)umaVenda.Id_Prato).Preco);
            }
            pedido.Id_Func = umaVenda.Id_Func;
            pedido.Num_Mesa = umaVenda.Num_Mesa;
            pedido.Qtd = umaVenda.Qtd;
            pedido.Status = umaVenda.Status;

            vendas.Add(pedido);
        }
        public String imprimirConta(string formadepagamento, float valorAReceber)
        {

            float totalcomdesconto = total - desconto;
            float troco = valorAReceber - total;

            StringBuilder sb = new StringBuilder();

            sb.Append("\t\tSIAR\n");
            sb.Append("Sistema Interativo de Automação de Restaurantes\n");
            //sb.Append("\nNº Venda:  " +getVenda().ID+ "\n");
            sb.Append("\nCliente:  " + this.numMesa + "\n");
            sb.Append("\n\n");
            sb.Append("Qtd\tDescrição\t\tValor(R$)\n");
            sb.Append("--------------------------------------------------------------\n");
            sb.Append("\n");
            foreach (PedidoBean ped in vendas)
            {
                if (ped.Id_Bebida != null)
                {
                    BebidaBean bebida = ws.BebidaBuscar((int)ped.Id_Bebida);
                    sb.Append(ped.Qtd + "\t" + bebida.Nome + "\t\t   " + bebida.Preco + "\n");
                }
                else if (ped.Id_Prato != null)
                {
                    PratoBean prato = ws.RecuperarPrato(ped.Id);
                    sb.Append(ped.Qtd + "\t" + prato.Nome + "\t\t   " + prato.Preco + "\n");
                }
            }

            sb.Append("--------------------------------------------------------------\n");
            sb.Append("\t\tSub-Total:\t" + this.total + "\n");
            sb.Append("\t\tDesconto:\t" + desconto + "\n");
            sb.Append("\t\tTOTAL:\t" + totalcomdesconto + "\n");
            sb.Append("\t\tForma de pagamento:  " + formadepagamento + "\n\n");
            sb.Append("\t\tTroco:\t" + troco + "\n");
            sb.Append("\t\tValor à Receber:\t" + valorAReceber + "\n");
            sb.Append("\n\n\n");
            sb.Append("\tAGRADECEMOS À PREFERÊNCIA");

            return sb.ToString();
        }
        public List<PedidoBean> getPedidos() {
            return vendas;
        }

        public void finalizarMesa()
        {
            foreach (PedidoBean pedidos in vendas)
            {
                ws.PedidoDeletar();
            }
        }
    }
}
